/**
 * User业务逻辑
 * @author LiQiang
 * @date 2014-08-07
 */
package com.chnbst.bstyun.service;

import java.util.List;
import java.util.Map;

import com.chnbst.bstyun.model.pojo.Company;
import com.chnbst.bstyun.model.pojo.User;
import com.chnbst.bstyun.model.vo.UserVo;

public interface UserService {
	/**
	 * 添加用户
	 * @param user 用户对象
	 * @return 返回自动增量id对象
	 */
	boolean insertUser(User user);
	
	/**
	 * 更新用户上次登录时间
	 * @param user
	 * @return true:更新成功 false：更新失败
	 */
	boolean updateUserLastTime(User user);
	
	/**
	 * 更新用户密码
	 * @param user 通过邮箱或则手机
	 * @return true:成功 false:失败
	 */
	boolean findPassword(User user);
	
	/**
	 * 更新用户
	 * @param user 通过邮箱或则手机
	 * @return true:成功 false:失败
	 */
	boolean updateUserByAccount(User user);
	
	/**
	 * 删除用户
	 * @param user 彻底删除用户数据
	 * @return true:成功 false:失败
	 */
	boolean deleteUser(User user);
	
	/**
	 * 根据用户绑定邮箱查找用户
	 * @param boundEmail 绑定邮箱
	 * @return 如果找到返回该用户，否则返回空 null
	 */
	Object boundEmailExists(String boundEmail);
	
	/**
	 * 根据用户帐号查找用户
	 * @param userEmail 用户邮箱
	 * @return 如果找到返回该用户，否则返回空 null
	 */
	Object emailExists(String bound);
	
	/**
	 * 用户通过Email登录
	 * @param user
	 * @return User
	 */
	User loginByEmail(User user);
	
	/**
	 * 用户通过手机号码登录
	 * @param user
	 * @return User
	 */
	User loginByTel(User user);
	
	/**
	 * 根据用户手机号码查找用户
	 * @param tel 手机号码
	 * @return 如果找到 返回该用户，否则返回NULL
	 */
	Object TelExists(String tel);

	/**
	 * 根据用户绑定手机查找用户
	 * @param boundTel 绑定手机
	 * @return 如果找到返回该用户，否则返回空 null
	 */
	Object boundTelExists(String boundTel);
	
	/**
	 * 根据用户主键更新用户
	 * @param user
	 * @return true:更新成功 false:更新失败
	 */
    boolean updateUserByKey(User user);
    
    /**
     * 根据用户id修改个人基本资料
     * @param user
     * @return
     */
    boolean updateUserByUserId(User user);
    
	/**
	 * 根据用户主键更新用户(邮箱或者手机解绑操作)
	 * @param user
	 * @return true:更新成功 false:更新失败
	 */
    boolean updateUserSafeInfo(User user);
    
    /**
     * 根据用户ID 查询 所有信息
     * @param userId
     * @return 返回 用户所有信息
     */
    User selectUserInfoByUserId(Integer userId);
    
    /**
     * 根据用户绑定邮箱  查询 用户信息
     * @param boundEmail
     * @return 用户信息
     */
    Object selectUserPsdByBoundEmail(String boundEmail);
    
    /**
     * 根据用户绑定电话  查询 用户信息
     * @param boundTel
     * @return 用户信息
     */
    Object selectUserPsdByBoundTel(String boundTel);
    
    /**
     * 根据用户注册帐号  查询 用户信息
     * @param user
     * @return 用户信息
     */
    Object selectUserByAccount(User user);
    
    
    /**
	 * 添加企业用户基本资料
	 * @param user 用户对象
	 * @return 返回自动增量id对象
	 */
	boolean insertCompany(Company company);
	
	 /**
     * 根据多条件查询试用过套餐的用户信息
     * @param userId
     * @return 返回 用户信息
     */
    User selectUserByConditons(Map<String, Object> map);
    
    /**
     * 根据用户ID 查询 UserVo
     * @param userId
     * @return 返回 UserVo
     */
    UserVo selectUserVoByUserId(Integer userId);
    
    /**
     * 根据公司名称 查询 User对象
     * @param belongCompanyName
     * @return 返回 User
     */
    List<User> selectUserByBelongCompanyName(String belongCompanyName);
   
    /**
     * 分页 查询 User对象
     * @param map
     * @return 返回 User
     */
    List<User> selectUsers(Map<String, Object> map);
    
    /**
     * 查询 User对象总数
     * @param map
     * @return 返回 User总数
     */
    int selectUserCount(Map<String, Object> map);
    
    
    /**
     * 根据用户id修改个人账户余额
     * @param user
     * @return
     */
    boolean updateAccountMoneyByUserId(User user);
    
    /**
     * 根据条件查询 User对象总数
     * @param map
     * @return 返回 User总数
     */
    int selectUserCountByIsYun(String isYun);
    
    /**
     * 根据条件 查询 User
     * @param 
     * @return 返回 User对象列表
     */
    List<UserVo> selectUsersByIsYun(Map<String, Object> map);

    /**
     * 根据传入的邮箱 后缀 查询 User
     * @param userEmail
     * @return 返回 User的个数
     */
	int selectCompanyEmpCountByDomain(String userEmail);

	/**
     * 根据域名  查询 UserVo
     * @param 
     * @return 返回 User对象列表
     */
	List<UserVo> selectCompanyEmpListByDomain(Map<String, Object> map);

	/**
     * 查询 账户总余额
     * @param 
     * @return 返回 账户总余额
     */
	Double selectAccountMoney(Map<String, Object> map);
}
